package com.java;

import java.lang.ref.PhantomReference;
import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;

public class CacheTests {
    public static void main(String[] args) throws InterruptedException {
        //1.强引用(假如直接把一个字节数组存储到List集合，list集合中存储是数组的强引用，
        // 强引用引用的对象即便是内存不足了，也不会被销毁。)
        //List<byte[]> cache=new ArrayList<>();
        //2.软引用(内存不足时软引用引用的对象可以被销毁)
        //List<SoftReference> cache=new ArrayList<>();
        //3.弱引用(弱引用引用的对象生命力比较脆弱，只要触发了GC可能对象就会被销毁。
        List<WeakReference<byte[]>> cache=new ArrayList<>();
        //4.虚引用(PhantomReference引用引用对象，相当于没有引用，只用于跟踪对象是否被销毁了，
        // 假如对象被销毁了，会将引用存储到引用队列)
        while(true){
            //cache.add(new SoftReference(new byte[1024*1024]));
            cache.add(new WeakReference<byte[]>(new byte[1024*1024]));
            //System.out.println(cache.get(0).get().length);
            //cache.add(new byte[1024*1024]);
            Thread.sleep(300);
        }
    }
}
